#ifndef _CCAMERA_H_
#define _CCAMERA_H_

#include "GameComponentTemplate.h"

class GameComponent;

#include "Ogre.h"
using namespace Ogre;

class CCameraTemplate : public GameComponentTemplate {

	// ComponentTemplate interface
public:
	//returns the Component ID that this template can create
	virtual const comp_id_type& componentID() const {
		return mComponentID;
	}
	virtual const comp_id_type& familyID() const {
		return mFamilyID;
	}

	virtual GameComponent *makeComponent();

	// CompHealth interface
public:
	//typedef int healt_value_t;
	//enum bodyPart_e {
	//	head = 0, torso, leftArm, rightArm, leftLeg, rightLeg, cNumBodyParts 
	//};
	//healt_value_t getInitialHealthAt(const bodyPart_e part) const {
	//	return mInitialHPs[part];
	//}
	//void setInitialHealthAt(const bodyPart_e part, const healt_value_t hp) {
	//	mInitialHPs[part] = hp;
	//}
	
private:
	//healt_value_t mInitialHPs[cNumBodyParts];

	static comp_id_type mComponentID;
	static comp_id_type mFamilyID;
};

class CCamera : public GameComponent {
	//Component interface
public:
	//CCamera(Camera* cam,Viewport* viewport,RenderWindow* window);
	CCamera();
	CCamera(CCameraTemplate* ct);
	~CCamera();

	virtual const comp_id_type& familyID() const { return mFamilyID; } //const { return mFamilyID; }
	virtual const comp_id_type& componentID() const { return mComponentID; } // const { return mComponentID; }

	//CompVisual interface
	//void init();
	void update();
	void setup(); //const = 0
	void moveCamera();
	void reset();

	//int test; //const = 0
private:
	static comp_id_type mFamilyID;
	static comp_id_type mComponentID;

	static Camera* mCamera;
	static Viewport *mViewport;
	static RenderWindow* mWindow;
};

#endif
